"""
Moonshot网络搜索功能实现
支持Moonshot模型的网络搜索功能
"""
from typing import Dict, Any, List, Optional
import json
import logging

from ...capabilities.web_search import WebSearchCapability

logger = logging.getLogger("llm.moonshot.search")

class MoonshotWebSearch(WebSearchCapability):
	"""Moonshot的网络搜索实现"""
	
	def _initialize(self) -> None:
		"""初始化搜索功能"""
		# 检查配置中是否启用了搜索
		self.search_enabled = self.provider.config.get("search", False)
		logger.debug(f"Moonshot搜索功能初始化，启用状态: {self.search_enabled}")
	
	def is_supported(self) -> bool:
		"""
		检查是否支持网络搜索
		
		Returns:
			是否支持网络搜索
		"""
		return self.search_enabled
		
	def prepare_search_tools(self) -> List[Dict[str, Any]]:
		"""
		准备搜索工具定义
		
		Moonshot使用名为$web_search的内置函数作为搜索工具
		
		Returns:
			搜索工具定义列表
		"""
		return [{
			"type": "builtin_function",
			"function": {
				"name": "$web_search"
			}
		}]
	
	def execute_search(self, query: str) -> Dict[str, Any]:
		"""
		执行网络搜索
		
		对于Moonshot，搜索实际上是由提供商内部处理的，
		这个方法仅用于记录和标准化接口。
		
		Args:
			query: 搜索查询
			
		Returns:
			搜索参数
		"""
		logger.info(f"执行Moonshot搜索: {query}")
		return {"query": query}
		
	def handle_search_result(self, result: Dict[str, Any]) -> str:
		"""
		处理搜索结果
		
		Args:
			result: 搜索结果
			
		Returns:
			处理后的结果字符串
		"""
		# Moonshot的搜索结果已包含在模型响应中
		if isinstance(result, dict):
			return json.dumps(result, ensure_ascii=False)
		return str(result)
		
	def format_tool_response(self, tool_call_id: str, result: Dict[str, Any]) -> Dict[str, Any]:
		"""
		格式化工具响应消息
		
		Args:
			tool_call_id: 工具调用ID
			result: 搜索结果
			
		Returns:
			格式化的响应消息
		"""
		return {
			"role": "tool",
			"tool_call_id": tool_call_id,
			"name": "$web_search",
			"content": self.handle_search_result(result)
		}
